package qq.login.gui;

import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import client.handler.ClientHandler;


public class LoginGui extends JFrame {
	
	private BackMessage backMessage;
	private JFrame frame; 
	private JPanel panel;
	private JLabel userLabel;
	private JTextField userText;
	private JLabel passwordLabel;
	private JPasswordField passwordText;
	private JButton loginButton;
	private JButton cancelButton;
//	private JPanel loginInoff;
	private JLabel loginInfo;
	
	
	

	/**
	 * @param ch
	 * @throws HeadlessException
	 */
	public LoginGui() throws HeadlessException {
		super();
		backMessage=new BackMessage();
		this.backMessage.setButtonStaue(0);
		this.backMessage.setUserName("");
		this.backMessage.setPassWord("");
	}
	
	public void createLoginGUI() {
		
        
        frame = new JFrame("QQ Login...");// 创建 JFrame 实例
        frame.setSize(300, 200);// Setting the width and height of frame
        frame.setLocationRelativeTo(null); //相对居中
        frame.setDefaultLookAndFeelDecorated(true);//外观主题
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//点击x关闭

        /* 创建面板，这个类似于 HTML 的 div 标签
         * 我们可以创建多个面板并在 JFrame 中指定位置
         * 面板中我们可以添加文本字段，按钮及其他组件。
         */
        panel = new JPanel();  
        
        /* 
         * 调用用户定义的方法并添加组件到面板
         */
        placeComponents(panel);
        // 添加面板
        frame.add(panel);
        // 设置界面可见
        frame.setVisible(true);
	}
	private  void placeComponents(JPanel panel) {

        /* 
         * 绝对布局
         * 生成的组件相对位置随着窗体大小改变不改变相对位置
         */
        panel.setLayout(null);

        // 创建 JLabel
        userLabel = new JLabel("User:");
        /* 这个方法定义了组件的位置。
         * setBounds(x, y, width, height)
         * x 和 y 指定左上角的新位置，由 width 和 height 指定新的大小。
         */
        userLabel.setBounds(10,20,80,25);
        panel.add(userLabel);

        /* 
         * 创建文本域用于用户输入
         */
        userText = new JTextField(20);
        userText.setBounds(100,20,165,25);
        panel.add(userText);

        // 输入密码的文本域
        passwordLabel = new JLabel("Password:");
        passwordLabel.setBounds(10,50,80,25);
        panel.add(passwordLabel);

        /* 
         *这个类似用于输入的文本域
         * 但是输入的信息会以点号代替，用于包含密码的安全性
         */
        passwordText = new JPasswordField(20);
        passwordText.setBounds(100,50,165,25);
        panel.add(passwordText);

        // 创建登录按钮
        loginButton = new JButton("login");
        loginButton.setBounds(30, 100, 100, 25);
        panel.add(loginButton);
        
        // 创建cancel按钮
        cancelButton = new JButton("cancel");
        cancelButton.setBounds(160, 100, 100, 25);
        panel.add(cancelButton);
        
        //天假loginInfo
        loginInfo=new JLabel("",JLabel.CENTER);
        loginInfo.setBounds(30, 135, 250, 25);
        loginInfo.setText("press login .......");
        panel.add(loginInfo);
    }
	
	public  void addAction(final ClientHandler ch){
    	loginButton.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				backMessage.setButtonStaue(1);
				backMessage.setUserName(userText.getText());
				backMessage.setPassWord(new String(passwordText.getPassword()));
			}
    		
    	});
    	
    	cancelButton.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				backMessage.setButtonStaue(-1);
				backMessage.setUserName("");
				backMessage.setPassWord("");
			}
    		
    	});
    }
	public void close()
	{
		frame.dispose();
	}

	public BackMessage getBackMessage() {
		return backMessage;
	}

	public void setBackMessage(BackMessage backMessage) {
		this.backMessage = backMessage;
	}

	public JLabel getLoginInfo() {
		return loginInfo;
	}

	public void setLoginInfo(JLabel loginInfo) {
		this.loginInfo = loginInfo;
	}


	/**
	 * 第一个版本的action，传递CliendHandler对象
	 */
//    public  void addAction(final ClientHandler ch){
//    	loginButton.addActionListener(new ActionListener(){
//
//			public void actionPerformed(ActionEvent e) {
//				// TODO Auto-generated method stub
//				String user=userText.getText();
//				String password=new String(passwordText.getPassword());
//				
//				DataPackage data=new DataPackage();
//				data.setFromName(user);
//				data.setToName("zhuyi1");
//				data.setMessageType(MessageType.LOGIN);
//				/*
//				 * 预留密码验证功能
//				 */
//				data.setMessageData(password);
//				data.setTime(System.currentTimeMillis());
//				System.out.println(data.toString());
//				
//				DataPackage receiveLogin = null; //接受反悔的信息包
//				try {
//					ch.getOos().writeObject(data);
//					System.out.println("send login data ");
//					receiveLogin=(DataPackage) ((ClientHandler) ch).getOis().readObject();
//				} catch (IOException e1) {
//					// TODO Auto-generated catch block
//					e1.printStackTrace();
//				} catch (ClassNotFoundException e1) {
//					// TODO Auto-generated catch block
//					e1.printStackTrace();
//				}
//				if(receiveLogin.getFromName().equals("server")&&receiveLogin.getMessageType()==MessageType.LOGIN&&receiveLogin.getMessageData().equals("ack"))
//				{
//					/*
//					 * 开启主界面
//					 * 启动子线程
//					 * 关闭自身
//					 */
//				}
//				else
//				{
//					loginInfo.setText("Avvount or Password error,Try again...");
//				}
//				
//			}
//    		
//    	});
//    	
//    	cancelButton.addActionListener(new ActionListener(){
//
//			public void actionPerformed(ActionEvent e) {
//				// TODO Auto-generated method stub
//				DataPackage data=new DataPackage();
//				data.setFromName("");
//				data.setToName("");
//				data.setMessageType(MessageType.MESSAGE);
//				/*
//				 * 预留密码验证功能
//				 */
//				data.setMessageData("");
//				data.setTime(System.currentTimeMillis());
//				try {
//					ch.getOos().writeObject(data);
//				} catch (IOException e1) {
//					// TODO Auto-generated catch block
//					e1.printStackTrace();
//				}
//				System.exit(0);
//			}
//    		
//    	});
//    }
}
